package com.william.jdbcplus.boot.test.dao;

import com.william.jdbcplus.boot.test.entity.SysUser;
import com.william.jdbcplus.boot.test.vo.SysUserDepVo;
import com.william.jdbcplus.boot.test.vo.SysUserSysDepartVO;
import com.william.jdbcplus.core.conditions.wrap.IWrap;
import com.william.jdbcplus.common.page.IPage;
import com.william.jdbcplus.common.page.Page;

import java.util.List;

/**
 * <p>
 * 用户表 Mapper 接口
 * </p>
 *
 * @Author scott
 * @since 2018-12-20
 */
public interface SysUserDao {
    /**
     * 通过用户账号查询用户信息
     *
     * @param username
     * @return
     */
    public SysUser getUserByName(String username);

    /**
     * 根据部门Id查询用户信息
     *
     * @param page
     * @param departId
     * @return
     */
    IPage<SysUser> getUserByDepId(Page page, String departId, String username);

    /**
     * 根据用户Ids,查询用户所属部门名称信息
     *
     * @param userIds
     * @return
     */
    List<SysUserDepVo> getDepNamesByUserIds(List<String> userIds);

    /**
     * 根据部门Ids,查询部门下用户信息
     *
     * @param page
     * @param departIds
     * @return
     */
    IPage<SysUser> getUserByDepIds(Page page, List<String> departIds, String username);

    /**
     * 根据角色Id查询用户信息
     *
     * @param page
     * @param
     * @return
     */
    IPage<SysUser> getUserByRoleId(Page page, String roleId, String username);

    /**
     * 根据用户名设置部门ID
     *
     * @param username
     * @param orgCode
     */
    void updateUserDepart(String username, String orgCode);

    /**
     * 根据手机号查询用户信息
     *
     * @param phone
     * @return
     */
    public SysUser getUserByPhone(String phone);


    /**
     * 根据邮箱查询用户信息
     *
     * @param email
     * @return
     */
    public SysUser getUserByEmail(String email);

    /**
     * 根据 orgCode 查询用户，包括子部门下的用户
     *
     * @param page       分页对象, xml中可以从里面进行取值,传递参数 Page 即自动分页,必须放在第一位(你可以继承Page实现自己的分页对象)
     * @param orgCode
     * @param userParams 用户查询条件，可为空
     * @return
     */
    List<SysUserSysDepartVO> getUserByOrgCode(IPage page, String orgCode, SysUser userParams);


    /**
     * 查询 getUserByOrgCode 的Total
     *
     * @param orgCode
     * @param userParams 用户查询条件，可为空
     * @return
     */
    Integer getUserByOrgCodeTotal(String orgCode, SysUser userParams);

    /**
     * @Author scott
     * @Date 2019/12/13 16:10
     * @Description: 批量删除角色与用户关系
     */
    void deleteBathRoleUserRelation(String[] roleIdArray);

    /**
     * @Author scott
     * @Date 2019/12/13 16:10
     * @Description: 批量删除角色与权限关系
     */
    void deleteBathRolePermissionRelation(String[] roleIdArray);

    /**
     * 查询被逻辑删除的用户
     */
    List<SysUser> selectLogicDeleted(IWrap wrapper);

    /**
     * 还原被逻辑删除的用户
     */
    int revertLogicDeleted(String userIds, SysUser entity);

    /**
     * 彻底删除被逻辑删除的用户
     */
    int deleteLogicDeleted(String userIds);

    /**
     * 更新空字符串为null【此写法有sql注入风险，禁止随便用】
     */
    int updateNullByEmptyString(String fieldName);

    /**
     * 根据部门Ids,查询部门下用户信息
     *
     * @param departIds
     * @return
     */
    List<SysUser> queryByDepIds(List<String> departIds, String username);
}


